package 中等.哈希表;

/**
 * 给你两个长度相等的字符串 s 和 t。每一个步骤中，你可以选择将 t 中的 任一字符 替换为 另一个字符。
 * 返回使 t 成为 s 的字母异位词的最小步骤数。
 * 字母异位词 指字母相同，但排列不同（也可能相同）的字符串。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/minimum-number-of-steps-to-make-two-strings-anagram
 */
public class 制造字母异位词的最小步骤数_1347 {

    public static void main(String[] args) {

    }

    /**
     * 字符统计+逆序思维
     * 计算 t 中每个字符不需要替换的字符，总长度 - 全部无需替换的字符数量
     * 即为答案
     */
    public int minSteps(String s, String t) {
        int[] sArr = new int[26];
        for (char c : s.toCharArray()) {
            sArr[c - 'a']++;
        }
        int[] tArr = new int[26];
        for (char c : t.toCharArray()) {
            tArr[c - 'a']++;
        }

        int unStep = 0;
        for (int i = 0; i < 26; i++) {
            unStep += Math.min(sArr[i], tArr[i]);
        }
        return s.length() - unStep;
    }

}
